﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Http;
using System.Runtime.Serialization;
using System.IO;
using AgentLib;

namespace AgentTest
{
    public partial class Form1 : Form
    { 
        Агент прокси_локального_агента;
        int мой_порт, удалённый_порт;
        HttpChannel channel;
        HttpClientChannel clientchannel;
        Агент.Сообщение сообщ;
        public Form1()
        {
            InitializeComponent();
        }

        //регистрация и инициализация
        private void button2_Click(object sender, EventArgs e)
        {
            
            мой_порт = int.Parse(textBox4.Text);
            удалённый_порт = 13101;

            //RemotingConfiguration.Configure("AgentTest.exe.config", false);

            clientchannel = new HttpClientChannel();
            ChannelServices.RegisterChannel(clientchannel);
            channel = new HttpChannel(мой_порт);
            ChannelServices.RegisterChannel(channel);

            RemotingConfiguration.RegisterWellKnownServiceType(
                        typeof(Агент),
                        "Агент.soap",
                        WellKnownObjectMode.Singleton);

            textBox1.Text += "Тип агента зарегистрирован на порт " + мой_порт;


            button1.Enabled = true;

            прокси_локального_агента = (Агент)Activator.GetObject(
                        typeof(Агент),
                        "http://localhost:" + мой_порт + "/Агент.soap");
            textBox1.Text += "\r\nСоздан прокси локального объекта";
            button1.Enabled = true;
        }

        //отправка сообщений остальным агентам(пока только одному, с фиксированным портом)
        private void button1_Click(object sender, EventArgs e)
        {
            прокси_локального_агента.Отправить(сообщ, 13101);
            textBox1.Text += "\r\n Данные отправлены агенту с портом 13101";
        }


        //два метода чисто для тестов
        //вывод сообщения, содержащегося в данный момент в локальном агенте, в тестовом варианте только поле путь
        private void button3_Click(object sender, EventArgs e)
        {
            textBox1.Text += "\r\nСообщения, находящиеся в агенте\r\n";
            textBox1.Text +=прокси_локального_агента.мои_данные.путь+ "\r\n";
            
        }

        //пихаем в локальный агент сообщение из текстбокса, в тестовом варианте берем только поле путь
        private void button4_Click(object sender, EventArgs e)
        {
            сообщ = new Агент.Сообщение();
            сообщ.путь = textBox3.Text;
            прокси_локального_агента.мои_данные=сообщ;
        }     
    }
}